﻿using System;

namespace LetsDoIt.Logging
{
    public interface ILogger
    {
        /* Log a message object */
        void Debug(Type type, object message);
        void Info(Type type, object message);
        void Warn(Type type, object message);
        void Error(Type type, object message);
        void Fatal(Type type, object message);

        /* Log a message object and exception */
        void Debug(Type type, object message, Exception t);
        void Info(Type type, object message, Exception t);
        void Warn(Type type, object message, Exception t);
        void Error(Type type, object message, Exception t);
        void Fatal(Type type, object message, Exception t);

        /* Log a message string using the System.String.Format syntax */
        void DebugFormat(Type type, string format, params object[] args);
        void InfoFormat(Type type, string format, params object[] args);
        void WarnFormat(Type type, string format, params object[] args);
        void ErrorFormat(Type type, string format, params object[] args);
        void FatalFormat(Type type, string format, params object[] args);

        /* Log a message string using the System.String.Format syntax */
        void DebugFormat(Type type, IFormatProvider provider, string format, params object[] args);
        void InfoFormat(Type type, IFormatProvider provider, string format, params object[] args);
        void WarnFormat(Type type, IFormatProvider provider, string format, params object[] args);
        void ErrorFormat(Type type, IFormatProvider provider, string format, params object[] args);
        void FatalFormat(Type type, IFormatProvider provider, string format, params object[] args);

        //
        string GetInfoFile(Type type);
    }
}
